#! /bin/bash
#通过目录获取用例的数组case_list
# read -p "enter a number: " number  #提示用户输入数字
# if [ -z $number ];then             #判断用户是否输入，如果未输入则打印error
  # echo "Error"
  # exit
# else
  # jieguo=`echo "$number*1" | bc `  #把用户的输入值和1相乘，交给bc做运算
  # if [ $jieguo -eq 0 ];then          #判断计算结果是否为0，为0则说明number非数字(字符串和0相乘结果为0)
   # echo "not a number"
   # exit
  # fi
# fi

#! /bin/bash
#通过目录获取用例的数组case_list
# read -p "enter a number: " number  #提示用户输入数字
# if [ -z $number ];then             #判断用户是否输入，如果未输入则打印error
  # echo "Error"
  # exit
# else
  # jieguo=`echo "$number*1" | bc `  #把用户的输入值和1相乘，交给bc做运算
  # if [ $jieguo -eq 0 ];then          #判断计算结果是否为0，为0则说明number非数字(字符串和0相乘结果为0)
   # echo "not a number"
   # exit
  # fi
# fi

#1.Shell变量
# variable=value
# variable='value'
# variable="value"
# echo $variable

#2.Shell命令替换：将命令的输出结果赋值给变量，一种是反引号``，一种是$()
#方法如下：var=`command1;command2;command3;...`
#		   var=$(command1;command2;command3;...)
#例如：#date 用格式控制符 +%s 时间戳 '+%Y-%m-%d %H:%M:%S' #输出时加双引号防止格式混乱

# begin_time=$(date +%s)
# sleep 5s
# finish_time=$(date +%s)
# run_time=$(($finish_time-$begin_time))

# echo "begin time: $begin_time"
# echo "finish time: $finish_time"
# echo "runtime: ${run_time}s"

# LSL=$(ls -l)
# echo "$LSL"

#有些情况必须使用 $()：$() 支持嵌套，反引号不行
#ls|sed -n '1p' 第一个文件 wc -l files 输出文件行数及文件名
# fir_file_lines=$(wc -l $(ls|sed -n '1p'))
# echo "$fir_file_lines"

# Shell位置参数（命令行参数）
# 1)给脚本文件传递位置参数
#！/bin/bash

# echo "Language: $1"
# echo "URL: $2"

# 2)给函数传递位置参数
#！/bin/bash
# function func(){
	# echo "Language: $1"
	# echo "URL: $2"
# }

#函数调用 
# func C++ http://c.biancheng.net/cplus/

####5.Shell特殊变量#####
#它们分别是：$#、$*、$@、$?、$$
# 变量	含义
# $0	当前脚本的文件名。
# $n	（n≥1）传递给脚本或函数的参数。第一个参数是 $1，第二个参数是 $2。
# $#	传递给脚本或函数的参数个数。
# $*	传递给脚本或函数的所有参数。
# $@	传递给脚本或函数的所有参数。当被双引号" "包含时，$@ 与 $* 稍有不同，我们将在《Shell $*和$@的区别》一节中详细讲解。
# $?	上个命令的退出状态，或函数的返回值，我们将在《Shell $?》一节中详细讲解。
# $$	当前 Shell 进程 ID。对于 Shell 脚本，就是这些脚本所在的进程 ID。
#1) 给脚本文件传递参数
#!/bin/bash

# echo "Process ID:$$"
# echo "File Name $0"
# echo "$1"
# echo "$2"
# echo "All parameters 1: $@"
# echo "All parameters 2: $*"
# echo "Total: $#"

#2) 给函数传递参数
#!/bin/bash
# function func(){
	# echo "Process ID:$$"
	# echo "File Name $0"
	# echo "$1"
	# echo "$2"
	# echo "All parameters 1: $@"
	# echo "All parameters 2: $*"
	# echo "Total: $#"
# }
# func Linux Shell
# func Java http://c.biancheng.net/java/

####6.Shell$?#####
#1)$?获取上一个命令的退出状态
#！/bin/bash

# if [ "$1" == 100 ]
# then 
	# exit 0 #参数正确，退出状态为0
# else
	# exit 1 #参数错误，退出状态为0
# fi


#2)$?获取函数返回值

#!/bin/bash

# function add(){
	# return 	`expr $1 + $2`
# }

# add 23 50
# echo $?

#字符串详解,将两个字符串并排放在一起就能实现拼接
# n=74
# str1=c.bianchen.net$n str2="shell \"script\" $n"
# str3='C语言中文网 $n'
# echo $str1 ${#str1}
# echo $str2 ${#str2}
# echo $str3 ${#str3}

# echo $str1$str2$str3


#字符串截取${string:start:end}  ${string#*chars} ${string##*chars}

# url="c.bianchen.net"
# echo ${url:2:9}
# echo ${url:2}
# echo ${url#*.}

url="http://c.biancheng.net/index.html"
# echo ${url#*/}
# echo ${url##*/}
# echo ${url%/*}
# echo ${url%%/*}


str="---aa+++aa@@@"
# echo ${str#*aa}
# echo ${str##*aa}
# echo ${str%aa*}
# echo ${str%%aa*}

#数组拼接
# array1=(23 56)
# array2=(99 "http://c.biancheng.net/shell/")
# array_new=(${array1[*]} ${array2[*]})
# echo ${array_new[*]}

#数组删除unset
# arr=(23 56 99 "http://c.biancheng.net/shell/")
# unset arr[1]
# echo -n ${arr[*]}
# unset arr[0]
# echo -n ${arr[*]}

#Shell内建命令：就是由Bash自身提供的命令，而不是文件系统中的某个可执行文件。如，cd，ls
#Shell外部命令：执行外部命令时不但会触发磁盘 I/O，还需要 fork 出一个单独的进程来执行，执行完成后再退出。
#而执行内建命令相当于调用当前 Shell 进程的一个函数。所内建命令执行速度比外部命令快。
# [root@ecs-984e-0008 xydsj]# type cd
# cd is a shell builtin
# [root@ecs-984e-0008 xydsj]# type ifconfig
# ifconfig is /usr/sbin/ifconfig
# [root@ecs-984e-0008 xydsj]# 

#read [-options] [variables]
# -a array 		把读取的数据赋值给数组 array，从下标 0 开始。
# -d delimiter	用字符串 delimiter 指定读取结束的位置，而不是一个换行符（读取到的数据不包括 delimiter）。
# -e			在获取用户输入的时候，对功能键进行编码转换，不会直接显式功能键对应的字符。
# -n num		读取 num 个字符，而不是整行字符。
# -p prompt		显示提示信息，提示内容为 prompt。
# -r			原样读取（Raw mode），不把反斜杠字符解释为转义字符。
# -s			静默模式（Silent mode），不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候，这是很有必要的。
# -t seconds	设置超时时间，单位为秒。如果用户没有在指定时间内输入完成，那么 read 将会返回一个非 0 的退出状态，表示读取失败。
# -u fd			使用文件描述符 fd 作为输入源，而不是标准输入，类似于重定向。

#例1read多变量赋值
# read -p "Enter some informaton>" name url age
# echo "网站名字：$name"
# echo "网址：$url"
# echo "年龄：$age"

#例2 read只读取一个字符
# read -n 1 -p "Enter a char > " char
# printf "\n"  #换行
# echo $char

#例3 在指定时间内输入密码
# if 
	# read -t 20 -sp "Enter password in 20 seconds(once) > " pass1 && printf "\n" &&  
	# read -t 20 -sp "Enter password in 20 seconds(again) > " pass2 && printf "\n" &&
	# [ $pass1 == $pass2 ]  #判断两次输入的密码是否相等
# then
    # echo "Valid password"
# else
    # echo "Invalid password"
# fi

# sed

echo "sed命令测试："
# sed -i -e 's/原字符串/替换字符串/' 文件
num_threads=10
duration=30
ramp_time=3
# old_str='ThreadGroup.num_threads">.*<'
# new_str='ThreadGroup.num_threads">'${num}'<'
# sed -i -e 's/'${old_str}'/'${new_str}'/' test.log

sed -i -e 's/ThreadGroup.num_threads">.*</ThreadGroup.num_threads">'${num_threads}'</' -e 's/ThreadGroup.duration">.*</ThreadGroup.duration">'${duration}'</'  -e 's/ThreadGroup.ramp_time">.*</ThreadGroup.ramp_time">'${ramp_time}'</'  test.log

# sed -i -e 's/name="ThreadGroup.num_threads">.*<\/stringProp>/name="ThreadGroup.num_threads">'${num}'<\/stringProp>/' -e 's/name="ThreadGroup.num_threads">.*<\/stringProp>/name="ThreadGroup.num_threads">'${num1}'<\/stringProp>/' test.log

















